package huawei_nowcoder;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

/**
 * @Description: 整数与IP地址间的转换
 * @Date: 2020/4/22
 * @Author: 许群星
 */
public class _32_IntegerConvertIPAdress {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while (sc.hasNext()){
            String str1=sc.nextLine();
            String str2=sc.nextLine();

            //ip转十进制
            String[] strings1=str1.split("\\.");
            String ans1="";
            for (int i = 0; i < strings1.length; i++) {
                String temp=strings1[i];
                ans1+=toBinary(temp,1);
            }
            long haha=toTen(ans1);
            System.out.println(haha);

            //十进制转ip
            String total=toBinary(str2,2);
            String ans2="";
            ans2+=toTen(total.substring(0,8))+".";
            ans2+=toTen(total.substring(8,16))+".";
            ans2+=toTen(total.substring(16,24))+".";
            ans2+=toTen(total.substring(24,32));

            System.out.println(ans2);
        }
    }
    //十进制数字转化为二进制字符串
    public static String toBinary(String string,int a){
        long temp=Long.valueOf(string);
        String ans="";
        while (temp>1){
            int haha= (int) (temp%2);
            ans+=haha;
            temp/=2;
        }
        ans+=temp;
        //转化为8位
        if (a==1){
            if (ans.length()<8){
                int between=8-ans.length();
                for (int i = 0; i < between; i++) {
                    ans+='0';
                }
            }
        }else {
            //转化为32位
            if (ans.length()<32){
                int between=32-ans.length();
                for (int i = 0; i < between; i++) {
                    ans+='0';
                }
            }
        }
        //倒序
        String res="";
        for (int i = ans.length()-1; i >= 0; i--) {
            res+=ans.charAt(i);
        }
        return res;
    }
    //二进制字符串转化为十进制数
    public static long toTen(String str){
        //正序字符串，倒序遍历相加
        char[] chars=str.toCharArray();
        long ans=0;
        for (int i = chars.length-1; i >=0 ; i--) {
            ans+=(chars[i]-'0')*Math.pow(2,chars.length-i-1);
        }
        return ans;
    }
}
/*
题目描述
原理：ip地址的每段可以看成是一个0-255的整数，把每段拆分成一个二进制形式组合起来，然后把这个二进制数转变成
一个长整数。
举例：一个ip地址为10.0.3.193
每段数字             相对应的二进制数
10                   00001010
0                    00000000
3                    00000011
193                  11000001
组合起来即为：00001010 00000000 00000011 11000001,转换为10进制数就是：167773121，即该IP地址转换后的数字就是它了。
的每段可以看成是一个0-255的整数，需要对IP地址进行校验
输入描述:
输入
1 输入IP地址
2 输入10进制型的IP地址

输出描述:
输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址

示例1
输入
复制
10.0.3.193
167969729
输出
复制
167773121
10.3.3.193
 */